# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Content.V21.Model.Action do
  @moduledoc """
  An actionable step that can be executed to solve the issue.

  ## Attributes

  *   `builtinSimpleAction` (*type:* `GoogleApi.Content.V21.Model.BuiltInSimpleAction.t`, *default:* `nil`) - Action implemented and performed in (your) third-party application. The application should point the merchant to the place, where they can access the corresponding functionality or provide instructions, if the specific functionality is not available.
  *   `builtinUserInputAction` (*type:* `GoogleApi.Content.V21.Model.BuiltInUserInputAction.t`, *default:* `nil`) - Action implemented and performed in (your) third-party application. The application needs to show an additional content and input form to the merchant as specified for given action. They can trigger the action only when they provided all required inputs.
  *   `buttonLabel` (*type:* `String.t`, *default:* `nil`) - Label of the action button.
  *   `externalAction` (*type:* `GoogleApi.Content.V21.Model.ExternalAction.t`, *default:* `nil`) - Action that is implemented and performed outside of (your) third-party application. The application needs to redirect the merchant to the external location where they can perform the action.
  *   `isAvailable` (*type:* `boolean()`, *default:* `nil`) - Controlling whether the button is active or disabled. The value is 'false' when the action was already requested or is not available. If the action is not available then a reason will be present. If (your) third-party application shows a disabled button for action that is not available, then it should also show reasons.
  *   `reasons` (*type:* `list(GoogleApi.Content.V21.Model.ActionReason.t)`, *default:* `nil`) - List of reasons why the action is not available. The list of reasons is empty if the action is available. If there is only one reason, it can be displayed next to the disabled button. If there are more reasons, all of them should be displayed, for example in a pop-up dialog.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :builtinSimpleAction => GoogleApi.Content.V21.Model.BuiltInSimpleAction.t() | nil,
          :builtinUserInputAction => GoogleApi.Content.V21.Model.BuiltInUserInputAction.t() | nil,
          :buttonLabel => String.t() | nil,
          :externalAction => GoogleApi.Content.V21.Model.ExternalAction.t() | nil,
          :isAvailable => boolean() | nil,
          :reasons => list(GoogleApi.Content.V21.Model.ActionReason.t()) | nil
        }

  field(:builtinSimpleAction, as: GoogleApi.Content.V21.Model.BuiltInSimpleAction)
  field(:builtinUserInputAction, as: GoogleApi.Content.V21.Model.BuiltInUserInputAction)
  field(:buttonLabel)
  field(:externalAction, as: GoogleApi.Content.V21.Model.ExternalAction)
  field(:isAvailable)
  field(:reasons, as: GoogleApi.Content.V21.Model.ActionReason, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Content.V21.Model.Action do
  def decode(value, options) do
    GoogleApi.Content.V21.Model.Action.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Content.V21.Model.Action do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
